#include <iostream>
using namespace std;

//构造函数
//C++中提供了构造函数constructor来处理类的初始化。
//构造函数一种特殊的成员函数，与其他成员函数不同，构造函数在创建对象时自动调用，不能返回任何值。

//定义：C++中的类可以定义与类名相同的特殊函数，这种与类名相同的特殊函数称为构造函数。
//构造函数在定义时可以有参数，也可以没有参数。
//没有任何返回类型的声明。

//构造函数
class Box {
private:
    int _w, _h, _len, ;

public:
    //无参构造函数
    Box() 
    {
        cout <<"Box()" << endl;
        _w = _h = _len  = 10;  //对成员变量进行初始化
    }

    //带参构造函数
    Box(int w, int h, int len) 
    {
        cout <<"Box(int w, int h, int len)" << endl;
        _w = w;
        _h = h;
        _len = len;
    }
    Box(int w, int len) 
    {
        cout <<"Box(int w, int len)" << endl;
        _w = w;
        _h = 10;
        _len = len;
    }

    //设置类中的成员函数，实现某些特定功能
    int get_len(){return _len;}
    int get_w(){return _w;}
    int get_h(){return _h;}
};

int main()
{
    Box a, b; //实例化两个对象a和b，自动调用无参构造函数
    //Box x[4]; //实例化数组对象x[4]，可实现4次无参构造函数调用
    cout << "a.get_len() = " << a.get_len() << endl;
    cout << "a.get_w() = " << a.get_w() << endl;
    cout << "a.get_h() = " << a.get_h() << endl;

    Box c(10, 20, 30);  //实例化对象c，自动调用带参构造函数
    cout << "c.get_len() = " << c.get_len() << endl;
    cout << "c.get_w() = " << c.get_w() << endl;
    cout << "c.get_h() = " << c.get_h() << endl;

    Box d(10, 30);  //实例化对象d，自动调用带参构造函数
    cout << "d.get_h() = " << d.get_h() << endl;
    return 0;
    //在实际工作中，尽量要在类中定义无参构造函数，避免因定义带参构造函数后，在实例化对象时没有调用无参构造函数而产生错误。
}
